package com.yand.data.queue;


/**
 *   long结构的队列数据结构  一次队列的实现   详细见   java.util包下的 queue相关实现
 *    1， 核心数组
 */
public class Queue {

    //核心数组
    private long [] arr;

    //最大长度
    private int maxSize;

    //队头 用于出队的时候标记
    private int top;

    //队尾 用于入队时候的标记
    private int end;

    //队列的有效长度
    private int item;


    /**
     * 队列的构造函数
     *
     * @param maxSize
     */
    public Queue(int maxSize){
        arr = new long[maxSize];
        this.maxSize = maxSize;
    }


    /**
     * 入队
     * @param value
     */
    public void insertQueue(long value){
        //++end 先加 再用
        //end++ 先用 再加
        arr[end++] = value;
        item ++;
    }


    /**
     * 返回队头的元素
     *
     * 数组不删除只是 下标的位置变了， 所以不可重复使用，如果需要实现该功能
     *     将数组的 头元素删除， 其余元素下标位置 -- , 最后一个位置 设置为
     *     null
     *     队尾 --
     * @return
     */
    public long peek(){
        item --;
        return arr[top++];
    }


    /**
     * 是否满了
     *
     */
    public boolean isFull(){

        return item == maxSize;
    }


    /**
     * 是否为空
     */

    public boolean isEmpty(){
        return item == 0;
    }


    /**
     * 返回 队列长度
     */
    public int size(){
        return item;
    }













}
